import os
import requests
import s3fs
import xarray as xr
import hvplot.xarrayAccessing Multiple NetCDF4/HDF5 Files - S3 Direct Access
Summary
In this notebook, we will access monthly sea surface height from ECCO V4r4 (10.5067/ECG5D-SSH44). The data are provided as a time series of monthly netCDFs on a 0.5-degree latitude/longitude grid.
We will access the data from inside the AWS cloud (us-west-2 region, specifically) and load a time series made of multiple netCDF datasets into a single xarray dataset. This approach leverages S3 native protocols for efficient access to the data.
Requirements
1. AWS instance running in us-west-2
NASA Earthdata Cloud data in S3 can be directly accessed via temporary credentials; this access is limited to requests made within the US West (Oregon) (code: us-west-2) AWS region.
2. Earthdata Login
An Earthdata Login account is required to access data, as well as discover restricted data, from the NASA Earthdata system. Thus, to access NASA data, you need Earthdata Login. Please visit https://urs.earthdata.nasa.gov to register and manage your Earthdata Login account. This account is free to create and only takes a moment to set up.
3. netrc File
You will need a netrc file containing your NASA Earthdata Login credentials in order to execute the notebooks. A netrc file can be created manually within text editor and saved to your home directory. For additional information see: Authentication for NASA Earthdata.
Learning Objectives
- how to retrieve temporary S3 credentials for in-region direct S3 bucket access
- how to define a dataset of interest and find netCDF files in S3 bucket
- how to perform in-region direct access of ECCO_L4_SSH_05DEG_MONTHLY_V4R4 data in S3
- how to plot the data
Import Packages
Get Temporary AWS Credentials
Direct S3 access is achieved by passing NASA supplied temporary credentials to AWS so we can interact with S3 objects from applicable Earthdata Cloud buckets. For now, each NASA DAAC has different AWS credentials endpoints. Below are some of the credential endpoints to various DAACs:
s3_cred_endpoint = {
'podaac':'https://archive.podaac.earthdata.nasa.gov/s3credentials',
'gesdisc': 'https://data.gesdisc.earthdata.nasa.gov/s3credentials',
'lpdaac':'https://data.lpdaac.earthdatacloud.nasa.gov/s3credentials',
'ornldaac': 'https://data.ornldaac.earthdata.nasa.gov/s3credentials',
'ghrcdaac': 'https://data.ghrc.earthdata.nasa.gov/s3credentials'
}Create a function to make a request to an endpoint for temporary credentials. Remember, each DAAC has their own endpoint and credentials are not usable for cloud data from other DAACs
def get_temp_creds(provider):
return requests.get(s3_cred_endpoint[provider]).json()temp_creds_req = get_temp_creds('podaac')
#temp_creds_reqSet up an s3fs session for Direct Access
s3fs sessions are used for authenticated access to s3 bucket and allows for typical file-system style operations. Below we create session by passing in the temporary credentials we recieved from our temporary credentials endpoint.
fs_s3 = s3fs.S3FileSystem(anon=False,
key=temp_creds_req['accessKeyId'],
secret=temp_creds_req['secretAccessKey'],
token=temp_creds_req['sessionToken'],
client_kwargs={'region_name':'us-west-2'})In this example we’re interested in the ECCO data collection from NASA’s PO.DAAC in Earthdata Cloud. In this case it’s the following string that unique identifies the collection of monthly, 0.5-degree sea surface height data (ECCO_L4_SSH_05DEG_MONTHLY_V4R4).
short_name = "ECCO_L4_SSH_05DEG_MONTHLY_V4R4"bucket = os.path.join('podaac-ops-cumulus-protected/', short_name, '*2015*.nc')
bucket'podaac-ops-cumulus-protected/ECCO_L4_SSH_05DEG_MONTHLY_V4R4/*2015*.nc'
Get a list of netCDF files located at the S3 path corresponding to the ECCO V4r4 monthly sea surface height dataset on the 0.5-degree latitude/longitude grid, for year 2015.
ssh_files = fs_s3.glob(bucket)
ssh_files['podaac-ops-cumulus-protected/ECCO_L4_SSH_05DEG_MONTHLY_V4R4/SEA_SURFACE_HEIGHT_mon_mean_2015-01_ECCO_V4r4_latlon_0p50deg.nc',
'podaac-ops-cumulus-protected/ECCO_L4_SSH_05DEG_MONTHLY_V4R4/SEA_SURFACE_HEIGHT_mon_mean_2015-02_ECCO_V4r4_latlon_0p50deg.nc',
'podaac-ops-cumulus-protected/ECCO_L4_SSH_05DEG_MONTHLY_V4R4/SEA_SURFACE_HEIGHT_mon_mean_2015-03_ECCO_V4r4_latlon_0p50deg.nc',
'podaac-ops-cumulus-protected/ECCO_L4_SSH_05DEG_MONTHLY_V4R4/SEA_SURFACE_HEIGHT_mon_mean_2015-04_ECCO_V4r4_latlon_0p50deg.nc',
'podaac-ops-cumulus-protected/ECCO_L4_SSH_05DEG_MONTHLY_V4R4/SEA_SURFACE_HEIGHT_mon_mean_2015-05_ECCO_V4r4_latlon_0p50deg.nc',
'podaac-ops-cumulus-protected/ECCO_L4_SSH_05DEG_MONTHLY_V4R4/SEA_SURFACE_HEIGHT_mon_mean_2015-06_ECCO_V4r4_latlon_0p50deg.nc',
'podaac-ops-cumulus-protected/ECCO_L4_SSH_05DEG_MONTHLY_V4R4/SEA_SURFACE_HEIGHT_mon_mean_2015-07_ECCO_V4r4_latlon_0p50deg.nc',
'podaac-ops-cumulus-protected/ECCO_L4_SSH_05DEG_MONTHLY_V4R4/SEA_SURFACE_HEIGHT_mon_mean_2015-08_ECCO_V4r4_latlon_0p50deg.nc',
'podaac-ops-cumulus-protected/ECCO_L4_SSH_05DEG_MONTHLY_V4R4/SEA_SURFACE_HEIGHT_mon_mean_2015-09_ECCO_V4r4_latlon_0p50deg.nc',
'podaac-ops-cumulus-protected/ECCO_L4_SSH_05DEG_MONTHLY_V4R4/SEA_SURFACE_HEIGHT_mon_mean_2015-10_ECCO_V4r4_latlon_0p50deg.nc',
'podaac-ops-cumulus-protected/ECCO_L4_SSH_05DEG_MONTHLY_V4R4/SEA_SURFACE_HEIGHT_mon_mean_2015-11_ECCO_V4r4_latlon_0p50deg.nc',
'podaac-ops-cumulus-protected/ECCO_L4_SSH_05DEG_MONTHLY_V4R4/SEA_SURFACE_HEIGHT_mon_mean_2015-12_ECCO_V4r4_latlon_0p50deg.nc']
Direct In-region Access
Open with the netCDF files using the s3fs package, then load them all at once into a concatenated xarray dataset.
fileset = [fs_s3.open(file) for file in ssh_files]Create an xarray dataset using the open_mfdataset() function to “read in” all of the netCDF4 files in one call.
ssh_ds = xr.open_mfdataset(fileset,
combine='by_coords',
mask_and_scale=True,
decode_cf=True,
chunks='auto')
ssh_ds<xarray.Dataset>
Dimensions: (time: 12, latitude: 360, longitude: 720, nv: 2)
Coordinates:
* time (time) datetime64[ns] 2015-01-16T12:00:00 ... 2015-12-16T...
* latitude (latitude) float32 -89.75 -89.25 -88.75 ... 89.25 89.75
* longitude (longitude) float32 -179.8 -179.2 -178.8 ... 179.2 179.8
time_bnds (time, nv) datetime64[ns] dask.array<chunksize=(1, 2), meta=np.ndarray>
latitude_bnds (latitude, nv) float32 dask.array<chunksize=(360, 2), meta=np.ndarray>
longitude_bnds (longitude, nv) float32 dask.array<chunksize=(720, 2), meta=np.ndarray>
Dimensions without coordinates: nv
Data variables:
SSH (time, latitude, longitude) float32 dask.array<chunksize=(1, 360, 720), meta=np.ndarray>
SSHIBC (time, latitude, longitude) float32 dask.array<chunksize=(1, 360, 720), meta=np.ndarray>
SSHNOIBC (time, latitude, longitude) float32 dask.array<chunksize=(1, 360, 720), meta=np.ndarray>
Attributes: (12/57)
acknowledgement: This research was carried out by the Jet Pr...
author: Ian Fenty and Ou Wang
cdm_data_type: Grid
comment: Fields provided on a regular lat-lon grid. ...
Conventions: CF-1.8, ACDD-1.3
coordinates_comment: Note: the global 'coordinates' attribute de...
... ...
time_coverage_duration: P1M
time_coverage_end: 2015-02-01T00:00:00
time_coverage_resolution: P1M
time_coverage_start: 2015-01-01T00:00:00
title: ECCO Sea Surface Height - Monthly Mean 0.5 ...
uuid: 088d03b8-4158-11eb-876b-0cc47a3f47f1- time: 12
- latitude: 360
- longitude: 720
- nv: 2
- time(time)datetime64[ns]2015-01-16T12:00:00 ... 2015-12-...
- axis :
- T
- bounds :
- time_bnds
- coverage_content_type :
- coordinate
- long_name :
- center time of averaging period
- standard_name :
- time
array(['2015-01-16T12:00:00.000000000', '2015-02-15T00:00:00.000000000', '2015-03-16T12:00:00.000000000', '2015-04-16T00:00:00.000000000', '2015-05-16T12:00:00.000000000', '2015-06-16T00:00:00.000000000', '2015-07-16T12:00:00.000000000', '2015-08-16T12:00:00.000000000', '2015-09-16T00:00:00.000000000', '2015-10-16T12:00:00.000000000', '2015-11-16T00:00:00.000000000', '2015-12-16T12:00:00.000000000'], dtype='datetime64[ns]') - latitude(latitude)float32-89.75 -89.25 ... 89.25 89.75
- axis :
- Y
- bounds :
- latitude_bnds
- comment :
- uniform grid spacing from -89.75 to 89.75 by 0.5
- coverage_content_type :
- coordinate
- long_name :
- latitude at grid cell center
- standard_name :
- latitude
- units :
- degrees_north
array([-89.75, -89.25, -88.75, ..., 88.75, 89.25, 89.75], dtype=float32)
- longitude(longitude)float32-179.8 -179.2 ... 179.2 179.8
- axis :
- X
- bounds :
- longitude_bnds
- comment :
- uniform grid spacing from -179.75 to 179.75 by 0.5
- coverage_content_type :
- coordinate
- long_name :
- longitude at grid cell center
- standard_name :
- longitude
- units :
- degrees_east
array([-179.75, -179.25, -178.75, ..., 178.75, 179.25, 179.75], dtype=float32) - time_bnds(time, nv)datetime64[ns]dask.array<chunksize=(1, 2), meta=np.ndarray>
- comment :
- Start and end times of averaging period.
- coverage_content_type :
- coordinate
- long_name :
- time bounds of averaging period
Array Chunk Bytes 192 B 16 B Shape (12, 2) (1, 2) Count 36 Tasks 12 Chunks Type datetime64[ns] numpy.ndarray - latitude_bnds(latitude, nv)float32dask.array<chunksize=(360, 2), meta=np.ndarray>
- coverage_content_type :
- coordinate
- long_name :
- latitude bounds grid cells
Array Chunk Bytes 2.81 kiB 2.81 kiB Shape (360, 2) (360, 2) Count 55 Tasks 1 Chunks Type float32 numpy.ndarray - longitude_bnds(longitude, nv)float32dask.array<chunksize=(720, 2), meta=np.ndarray>
- coverage_content_type :
- coordinate
- long_name :
- longitude bounds grid cells
Array Chunk Bytes 5.62 kiB 5.62 kiB Shape (720, 2) (720, 2) Count 55 Tasks 1 Chunks Type float32 numpy.ndarray
- SSH(time, latitude, longitude)float32dask.array<chunksize=(1, 360, 720), meta=np.ndarray>
- coverage_content_type :
- modelResult
- long_name :
- Dynamic sea surface height anomaly
- standard_name :
- sea_surface_height_above_geoid
- units :
- m
- comment :
- Dynamic sea surface height anomaly above the geoid, suitable for comparisons with altimetry sea surface height data products that apply the inverse barometer (IB) correction. Note: SSH is calculated by correcting model sea level anomaly ETAN for three effects: a) global mean steric sea level changes related to density changes in the Boussinesq volume-conserving model (Greatbatch correction, see sterGloH), b) the inverted barometer (IB) effect (see SSHIBC) and c) sea level displacement due to sea-ice and snow pressure loading (see sIceLoad). SSH can be compared with the similarly-named SSH variable in previous ECCO products that did not include atmospheric pressure loading (e.g., Version 4 Release 3). Use SSHNOIBC for comparisons with altimetry data products that do NOT apply the IB correction.
- valid_min :
- [-1.88057721]
- valid_max :
- [1.42077196]
Array Chunk Bytes 11.87 MiB 0.99 MiB Shape (12, 360, 720) (1, 360, 720) Count 36 Tasks 12 Chunks Type float32 numpy.ndarray - SSHIBC(time, latitude, longitude)float32dask.array<chunksize=(1, 360, 720), meta=np.ndarray>
- coverage_content_type :
- modelResult
- long_name :
- The inverted barometer (IB) correction to sea surface height due to atmospheric pressure loading
- units :
- m
- comment :
- Not an SSH itself, but a correction to model sea level anomaly (ETAN) required to account for the static part of sea surface displacement by atmosphere pressure loading: SSH = SSHNOIBC - SSHIBC. Note: Use SSH for model-data comparisons with altimetry data products that DO apply the IB correction and SSHNOIBC for comparisons with altimetry data products that do NOT apply the IB correction.
- valid_min :
- [-0.3014482]
- valid_max :
- [0.52456337]
Array Chunk Bytes 11.87 MiB 0.99 MiB Shape (12, 360, 720) (1, 360, 720) Count 36 Tasks 12 Chunks Type float32 numpy.ndarray - SSHNOIBC(time, latitude, longitude)float32dask.array<chunksize=(1, 360, 720), meta=np.ndarray>
- coverage_content_type :
- modelResult
- long_name :
- Sea surface height anomaly without the inverted barometer (IB) correction
- units :
- m
- comment :
- Sea surface height anomaly above the geoid without the inverse barometer (IB) correction, suitable for comparisons with altimetry sea surface height data products that do NOT apply the inverse barometer (IB) correction. Note: SSHNOIBC is calculated by correcting model sea level anomaly ETAN for two effects: a) global mean steric sea level changes related to density changes in the Boussinesq volume-conserving model (Greatbatch correction, see sterGloH), b) sea level displacement due to sea-ice and snow pressure loading (see sIceLoad). In ECCO Version 4 Release 4 the model is forced with atmospheric pressure loading. SSHNOIBC does not correct for the static part of the effect of atmosphere pressure loading on sea surface height (the so-called inverse barometer (IB) correction). Use SSH for comparisons with altimetry data products that DO apply the IB correction.
- valid_min :
- [-1.66542721]
- valid_max :
- [1.4550364]
Array Chunk Bytes 11.87 MiB 0.99 MiB Shape (12, 360, 720) (1, 360, 720) Count 36 Tasks 12 Chunks Type float32 numpy.ndarray
- acknowledgement :
- This research was carried out by the Jet Propulsion Laboratory, managed by the California Institute of Technology under a contract with the National Aeronautics and Space Administration.
- author :
- Ian Fenty and Ou Wang
- cdm_data_type :
- Grid
- comment :
- Fields provided on a regular lat-lon grid. They have been mapped to the regular lat-lon grid from the original ECCO lat-lon-cap 90 (llc90) native model grid. SSH (dynamic sea surface height) = SSHNOIBC (dynamic sea surface without the inverse barometer correction) - SSHIBC (inverse barometer correction). The inverted barometer correction accounts for variations in sea surface height due to atmospheric pressure variations.
- Conventions :
- CF-1.8, ACDD-1.3
- coordinates_comment :
- Note: the global 'coordinates' attribute describes auxillary coordinates.
- creator_email :
- ecco-group@mit.edu
- creator_institution :
- NASA Jet Propulsion Laboratory (JPL)
- creator_name :
- ECCO Consortium
- creator_type :
- group
- creator_url :
- https://ecco-group.org
- date_created :
- 2020-12-18T09:39:51
- date_issued :
- 2020-12-18T09:39:51
- date_metadata_modified :
- 2021-03-15T22:07:49
- date_modified :
- 2021-03-15T22:07:49
- geospatial_bounds_crs :
- EPSG:4326
- geospatial_lat_max :
- [90.]
- geospatial_lat_min :
- [-90.]
- geospatial_lat_resolution :
- [0.5]
- geospatial_lat_units :
- degrees_north
- geospatial_lon_max :
- [180.]
- geospatial_lon_min :
- [-180.]
- geospatial_lon_resolution :
- [0.5]
- geospatial_lon_units :
- degrees_east
- history :
- Inaugural release of an ECCO Central Estimate solution to PO.DAAC
- id :
- 10.5067/ECG5M-SSH44
- institution :
- NASA Jet Propulsion Laboratory (JPL)
- instrument_vocabulary :
- GCMD instrument keywords
- keywords :
- EARTH SCIENCE > OCEANS > SEA SURFACE TOPOGRAPHY > SEA SURFACE HEIGHT, EARTH SCIENCE SERVICES > MODELS > EARTH SCIENCE REANALYSES/ASSIMILATION MODELS
- keywords_vocabulary :
- NASA Global Change Master Directory (GCMD) Science Keywords
- license :
- Public Domain
- metadata_link :
- https://cmr.earthdata.nasa.gov/search/collections.umm_json?ShortName=ECCO_L4_SSH_05DEG_MONTHLY_V4R4
- naming_authority :
- gov.nasa.jpl
- platform :
- ERS-1/2, TOPEX/Poseidon, Geosat Follow-On (GFO), ENVISAT, Jason-1, Jason-2, CryoSat-2, SARAL/AltiKa, Jason-3, AVHRR, Aquarius, SSM/I, SSMIS, GRACE, DTU17MDT, Argo, WOCE, GO-SHIP, MEOP, Ice Tethered Profilers (ITP)
- platform_vocabulary :
- GCMD platform keywords
- processing_level :
- L4
- product_name :
- SEA_SURFACE_HEIGHT_mon_mean_2015-01_ECCO_V4r4_latlon_0p50deg.nc
- product_time_coverage_end :
- 2018-01-01T00:00:00
- product_time_coverage_start :
- 1992-01-01T12:00:00
- product_version :
- Version 4, Release 4
- program :
- NASA Physical Oceanography, Cryosphere, Modeling, Analysis, and Prediction (MAP)
- project :
- Estimating the Circulation and Climate of the Ocean (ECCO)
- publisher_email :
- podaac@podaac.jpl.nasa.gov
- publisher_institution :
- PO.DAAC
- publisher_name :
- Physical Oceanography Distributed Active Archive Center (PO.DAAC)
- publisher_type :
- institution
- publisher_url :
- https://podaac.jpl.nasa.gov
- references :
- ECCO Consortium, Fukumori, I., Wang, O., Fenty, I., Forget, G., Heimbach, P., & Ponte, R. M. 2020. Synopsis of the ECCO Central Production Global Ocean and Sea-Ice State Estimate (Version 4 Release 4). doi:10.5281/zenodo.3765928
- source :
- The ECCO V4r4 state estimate was produced by fitting a free-running solution of the MITgcm (checkpoint 66g) to satellite and in situ observational data in a least squares sense using the adjoint method
- standard_name_vocabulary :
- NetCDF Climate and Forecast (CF) Metadata Convention
- summary :
- This dataset provides monthly-averaged dynamic sea surface height interpolated to a regular 0.5-degree grid from the ECCO Version 4 Release 4 (V4r4) ocean and sea-ice state estimate. Estimating the Circulation and Climate of the Ocean (ECCO) state estimates are dynamically and kinematically-consistent reconstructions of the three-dimensional, time-evolving ocean, sea-ice, and surface atmospheric states. ECCO V4r4 is a free-running solution of a global, nominally 1-degree configuration of the MIT general circulation model (MITgcm) that has been fit to observations in a least-squares sense. Observational data constraints used in V4r4 include sea surface height (SSH) from satellite altimeters [ERS-1/2, TOPEX/Poseidon, GFO, ENVISAT, Jason-1,2,3, CryoSat-2, and SARAL/AltiKa]; sea surface temperature (SST) from satellite radiometers [AVHRR], sea surface salinity (SSS) from the Aquarius satellite radiometer/scatterometer, ocean bottom pressure (OBP) from the GRACE satellite gravimeter; sea-ice concentration from satellite radiometers [SSM/I and SSMIS], and in-situ ocean temperature and salinity measured with conductivity-temperature-depth (CTD) sensors and expendable bathythermographs (XBTs) from several programs [e.g., WOCE, GO-SHIP, Argo, and others] and platforms [e.g., research vessels, gliders, moorings, ice-tethered profilers, and instrumented pinnipeds]. V4r4 covers the period 1992-01-01T12:00:00 to 2018-01-01T00:00:00.
- time_coverage_duration :
- P1M
- time_coverage_end :
- 2015-02-01T00:00:00
- time_coverage_resolution :
- P1M
- time_coverage_start :
- 2015-01-01T00:00:00
- title :
- ECCO Sea Surface Height - Monthly Mean 0.5 Degree (Version 4 Release 4)
- uuid :
- 088d03b8-4158-11eb-876b-0cc47a3f47f1
Get the SSH variable as an xarray dataarray
ssh_da = ssh_ds.SSH
ssh_da<xarray.DataArray 'SSH' (time: 12, latitude: 360, longitude: 720)>
dask.array<concatenate, shape=(12, 360, 720), dtype=float32, chunksize=(1, 360, 720), chunktype=numpy.ndarray>
Coordinates:
* time (time) datetime64[ns] 2015-01-16T12:00:00 ... 2015-12-16T12:00:00
* latitude (latitude) float32 -89.75 -89.25 -88.75 ... 88.75 89.25 89.75
* longitude (longitude) float32 -179.8 -179.2 -178.8 ... 178.8 179.2 179.8
Attributes:
coverage_content_type: modelResult
long_name: Dynamic sea surface height anomaly
standard_name: sea_surface_height_above_geoid
units: m
comment: Dynamic sea surface height anomaly above the geoi...
valid_min: [-1.88057721]
valid_max: [1.42077196]- time: 12
- latitude: 360
- longitude: 720
- dask.array<chunksize=(1, 360, 720), meta=np.ndarray>
Array Chunk Bytes 11.87 MiB 0.99 MiB Shape (12, 360, 720) (1, 360, 720) Count 36 Tasks 12 Chunks Type float32 numpy.ndarray - time(time)datetime64[ns]2015-01-16T12:00:00 ... 2015-12-...
- axis :
- T
- bounds :
- time_bnds
- coverage_content_type :
- coordinate
- long_name :
- center time of averaging period
- standard_name :
- time
array(['2015-01-16T12:00:00.000000000', '2015-02-15T00:00:00.000000000', '2015-03-16T12:00:00.000000000', '2015-04-16T00:00:00.000000000', '2015-05-16T12:00:00.000000000', '2015-06-16T00:00:00.000000000', '2015-07-16T12:00:00.000000000', '2015-08-16T12:00:00.000000000', '2015-09-16T00:00:00.000000000', '2015-10-16T12:00:00.000000000', '2015-11-16T00:00:00.000000000', '2015-12-16T12:00:00.000000000'], dtype='datetime64[ns]') - latitude(latitude)float32-89.75 -89.25 ... 89.25 89.75
- axis :
- Y
- bounds :
- latitude_bnds
- comment :
- uniform grid spacing from -89.75 to 89.75 by 0.5
- coverage_content_type :
- coordinate
- long_name :
- latitude at grid cell center
- standard_name :
- latitude
- units :
- degrees_north
array([-89.75, -89.25, -88.75, ..., 88.75, 89.25, 89.75], dtype=float32)
- longitude(longitude)float32-179.8 -179.2 ... 179.2 179.8
- axis :
- X
- bounds :
- longitude_bnds
- comment :
- uniform grid spacing from -179.75 to 179.75 by 0.5
- coverage_content_type :
- coordinate
- long_name :
- longitude at grid cell center
- standard_name :
- longitude
- units :
- degrees_east
array([-179.75, -179.25, -178.75, ..., 178.75, 179.25, 179.75], dtype=float32)
- coverage_content_type :
- modelResult
- long_name :
- Dynamic sea surface height anomaly
- standard_name :
- sea_surface_height_above_geoid
- units :
- m
- comment :
- Dynamic sea surface height anomaly above the geoid, suitable for comparisons with altimetry sea surface height data products that apply the inverse barometer (IB) correction. Note: SSH is calculated by correcting model sea level anomaly ETAN for three effects: a) global mean steric sea level changes related to density changes in the Boussinesq volume-conserving model (Greatbatch correction, see sterGloH), b) the inverted barometer (IB) effect (see SSHIBC) and c) sea level displacement due to sea-ice and snow pressure loading (see sIceLoad). SSH can be compared with the similarly-named SSH variable in previous ECCO products that did not include atmospheric pressure loading (e.g., Version 4 Release 3). Use SSHNOIBC for comparisons with altimetry data products that do NOT apply the IB correction.
- valid_min :
- [-1.88057721]
- valid_max :
- [1.42077196]
Plot the SSH time series using hvplot
ssh_da.hvplot.image(y='latitude', x='longitude', cmap='Viridis',).opts(clim=(ssh_da.attrs['valid_min'][0],ssh_da.attrs['valid_max'][0]))Unable to display output for mime type(s):